/**
 * 目的港相关API接口
 */

import request from '../utils/request.js'

export const portApi = {
  /**
   * 获取目的港列表
   * @param {Object} params - 查询参数
   * @param {string} params.keyword - 搜索关键词
   * @param {string} params.country - 国家
   * @param {string} params.region - 地区
   * @param {boolean} params.popular - 是否只显示热门港口
   */
  getPortList(params = {}) {
    return request.get('/ports', params)
  },

  /**
   * 获取热门目的港（后端：/user/index/ports/popular）
   * 可选 limit 参数由后端控制或前端截取
   */
  getPopularPorts(limit) {
    return request.get('/user/index/ports/popular', typeof limit === 'number' ? { limit } : undefined)
  },

  /**
   * 获取目的港详情
   * @param {string} portId - 港口ID
   */
  getPortDetail(portId) {
    return request.get(`/ports/${portId}`)
  },

  /**
   * 搜索目的港
   * @param {string} keyword - 搜索关键词
   * @param {Object} params - 其他参数
   */
  searchPorts(keyword, params = {}) {
    return request.get('/ports/search', { keyword, ...params })
  },

  /**
   * 设置默认目的港
   * @param {string} portId - 港口ID
   */
  setDefaultPort(portId) {
    return request.post('/ports/set-default', { portId })
  },

  /**
   * 获取用户默认目的港
   */
  getDefaultPort() {
    return request.get('/ports/default')
  },

  /**
   * 添加收藏港口
   * @param {string} portId - 港口ID
   */
  favoritePort(portId) {
    return request.post(`/ports/${portId}/favorite`)
  },

  /**
   * 取消收藏港口
   * @param {string} portId - 港口ID
   */
  unfavoritePort(portId) {
    return request.delete(`/ports/${portId}/favorite`)
  },

  /**
   * 切换港口收藏状态
   * @param {number} userId - 用户ID
   * @param {number} portId - 港口ID
   */
  togglePortFavorite(userId, portId) {
    return request.post('/user/map/favorite', null, {
      params: {
        userId,
        portId
      }
    })
  },

  /**
   * 获取用户收藏的港口列表
   * @param {number} userId - 用户ID
   * @param {number} page - 页码
   * @param {number} size - 每页大小
   * @param {number} userLat - 用户纬度（可选）
   * @param {number} userLng - 用户经度（可选）
   */
  getUserFavoritePorts(userId, page = 1, size = 10, userLat, userLng) {
    const params = {
      userId,
      page,
      size
    }
    
    if (userLat !== undefined && userLng !== undefined) {
      params.userLat = userLat
      params.userLng = userLng
    }
    
    return request.get('/user/map/favorites', params)
  },

  /**
   * 检查港口收藏状态
   * @param {number} userId - 用户ID
   * @param {number} portId - 港口ID
   */
  checkPortFavoriteStatus(userId, portId) {
    return request.get('/user/map/favorite/status', {
      userId,
      portId
    })
  },

  /**
   * 获取附近港口（带收藏状态）
   * @param {number} userLat - 用户纬度
   * @param {number} userLng - 用户经度
   * @param {number} radius - 搜索半径（公里）
   * @param {number} userId - 用户ID（可选）
   * @param {number} page - 页码
   * @param {number} size - 每页大小
   */
  getNearbyPorts(userLat, userLng, radius = 100, userId, page = 1, size = 10) {
    const params = {
      userLat,
      userLng,
      radius,
      page,
      size
    }
    
    if (userId) {
      params.userId = userId
    }
    
    return request.get('/user/map/nearby', params)
  },

  /**
   * 获取收藏的港口列表
   */
  getFavoritePorts() {
    return request.get('/ports/favorites')
  },

  /**
   * 获取港口服务信息
   * @param {string} portId - 港口ID
   */
  getPortServices(portId) {
    return request.get(`/ports/${portId}/services`)
  },

  /**
   * 获取港口天气信息
   * @param {string} portId - 港口ID
   */
  getPortWeather(portId) {
    return request.get(`/ports/${portId}/weather`)
  },

  /**
   * 获取港口新闻动态
   * @param {string} portId - 港口ID
   * @param {Object} params - 查询参数
   */
  getPortNews(portId, params = {}) {
    return request.get(`/ports/${portId}/news`, params)
  },

  /**
   * 获取港口统计数据
   * @param {string} portId - 港口ID
   */
  getPortStats(portId) {
    return request.get(`/ports/${portId}/stats`)
  },

  /**
   * 获取港口费用信息
   * @param {string} portId - 港口ID
   * @param {Object} params - 查询参数
   * @param {string} params.vesselType - 船舶类型
   * @param {number} params.length - 船舶长度
   * @param {number} params.tonnage - 船舶吨位
   */
  getPortFees(portId, params = {}) {
    return request.get(`/ports/${portId}/fees`, params)
  },

  /**
   * 获取港口联系信息
   * @param {string} portId - 港口ID
   */
  getPortContacts(portId) {
    return request.get(`/ports/${portId}/contacts`)
  },

  /**
   * 获取港口时区信息
   * @param {string} portId - 港口ID
   */
  getPortTimezone(portId) {
    return request.get(`/ports/${portId}/timezone`)
  },

  /**
   * 获取港口距离计算
   * @param {string} fromPortId - 起始港口ID
   * @param {string} toPortId - 目标港口ID
   */
  calculateDistance(fromPortId, toPortId) {
    return request.get('/ports/distance', { fromPortId, toPortId })
  },

  /**
   * 获取港口航线信息
   * @param {string} portId - 港口ID
   */
  getPortRoutes(portId) {
    return request.get(`/ports/${portId}/routes`)
  },

  /**
   * 获取国家/地区列表
   */
  getCountryList() {
    return request.get('/ports/countries')
  },

  /**
   * 根据国家获取港口列表
   * @param {string} countryCode - 国家代码
   */
  getPortsByCountry(countryCode) {
    return request.get(`/ports/country/${countryCode}`)
  },

  // === OceanBridge IndexController-backed APIs ===
  /** 获取所有国家及其港口数量（/user/index/countries/withPortCount） */
  getCountriesWithPortCount() {
    return request.get('/user/index/countries/withPortCount')
  },
  /** 根据国家ID获取港口（/user/index/countries/{countryId}/ports） */
  getPortsByCountryId(countryId) {
    return request.get(`/user/index/countries/${countryId}/ports`)
  },
  /** 获取港口详情（/user/index/ports/{portId}/detail） */
  getIndexPortDetail(portId) {
    return request.get(`/user/index/ports/${portId}/detail`)
  },
  /** 按区域获取港口（/user/index/ports/byRegion?region=...） */
  getPortsByRegion(region) {
    return request.get('/user/index/ports/byRegion', { region })
  }

}

export default portApi